home *** CD-ROM | disk | FTP | other *** search
/ PC World Interactive 7 / PC World Interactive 7.iso / program / pasprog.EXE / POSTFIX.TXT < prev    next >
Text File  |  1980-01-10  |  6KB  |  122 lines

  1.   ┌──────────────────────────────────────────────────────────────────────────┐
  2.   │┌────────────────────────────────────────────────────────────────────────┐│
  3.   ││                                                                        ││
  4.   ││                      Bir Derleyici Yazmak ÿster misiniz?               ││
  5.   ││                                                                        ││
  6.   │└────────────────────────────────────────────────────────────────────────┘│
  7.   │ PS 31 · ₧ubat'96                                       Tunç Sabuncu      │
  8.   └──────────────────────────────────────────────────────────────────────────┘
  9.  
  10.  
  11.  Programlarìnìzì yazmak için kullandìºìnìz derleyicilerin nasìl çalìƒtìºìnì
  12.  hiç merak ettiniz mi ? PASCAL ya da PROLOG gibi bir dilde yazìlm샠kaynak
  13.  kodu okuyan hatta anlayan ve orada tanìmlanan süreçleri PC'nizin
  14.  anlayabileceºi tek dil olan makina diline çeviren bu programlarìn yazìlmasì
  15.  gerçekten çok zor ve uzun bir uºraƒtìr. Bu nedenle kimse kendi baƒìna
  16.  derleyici yazmaya kalkìƒmaz. Yazìlìmevleri ekipler kurup deneyimli
  17.  programcìlar arasìnda iƒbölümü yaparlar. Tasarìm ve kodlama ile geçen uzun
  18.  bir dönemden sonra daha uzun bir zaman denemeler için ayrìlìr. Çünkü kimse
  19.  "bazì PASCAL programlarìnì derleyen" bir programa para ödemez. Eh artìk
  20.  herhalde tek baƒìnìza derleyici yazmaya kalkìƒmazsìnìz! ₧aka bir yana, sonucu
  21.  ne olursa olsun her uºraƒ ( derleyici yazmaya çalìƒmak dahil ) size birƒeyler
  22.  kazandìrìr. Ama gelin biz biraz akademik takìlalìm.
  23.  
  24.  Bir süredir burada 'ÿnce ÿƒler" baƒlìºì ile tanìtmaya çalìƒtìºìmìz veri
  25.  yapìlarì size derleyici ve yorumlayìcì ( kaynak kodu bellekte çalìƒtìran,
  26.  EXE oluƒturmayan programlar. sözgelimi GWBASIC ) yazmanìn kapìlarìnì
  27.  açacak altìn bir anahtar. Aslìnda Programlama Sanatì'nìn önceki sayìlarìnda
  28.  da bu konulara deºindik. "Pascal'da baºlì listeler" baƒlìºì ile verilen
  29.  programlar veri yapìlarìnìn alt baƒlìklarìndan. Özetle yìºìt, kuyruk, baºlì
  30.  listeler ve aºaçlarì bilmeden derleyici yazmaya çalìƒmak biraz körebe
  31.  oynamaya benziyor.
  32.  
  33.  Laf-ì güzafì bir yana bìrakalìm ve konuya yeni ìsìnan okuyucularìmìz için
  34.  derleyicilerin gerçekte ne yaptìklarìnì kìsaca anlatalìm. Siz programcì
  35.  olarak PC'niz için hiçbir anlamì olmayan 'print' ya da 'a:=b+c' gibi
  36.  laflarì yazìp ondan birƒeyler beklersiniz. ÿƒte derleyiciler bu ASCII
  37.  yìºìnìnì bazen satìr numaralarìnì ( BASIC ) bazen ';' gibi iƒaretleri
  38.  ( PASCAL ) bazen de '(' gibi ayraçlarì ( LISP ) kullanarak parçalarlar.
  39.  Buraya kadar basit. Fakat bundan sonra deºiƒik algoritmalarla kurulmuƒ
  40.  çözümleyicileri ( parser ) kullanarak sizin pascalca anlattìºìnìz
  41.  iƒleri ( dìƒarìdan bir sayì al, ikiyle çarp, ekrana yaz vb. ) bellekte
  42.  simgelerler. ÿƒte veri yapìlarì bu noktada devreye girer. Sözgelimi
  43.  a=b+c gibi bir ifade,
  44.  
  45.           a
  46.         /  \
  47.        =    +
  48.            / \
  49.           b   c
  50.  
  51.  böyle bir aºaçta simgelenir. Bu aºaçlara da çözümleme aºaçlarì denir.
  52.  ( Çözümleyicilere ve aºaçlara gelecek sayìlarda deºineceºiz. )
  53.  Çözümleyici birim, üzerine düƒeni yaptìktan sonra sìra deºerlendirme ve
  54.  kod üretme modülüne gelir. Bu aºaç için üretilecek ASSEMBLY kodu ise
  55.  
  56.    mov AX,WORD PTR b
  57.    add AX,WORD PTR c
  58.    mov WORD PTR a,AX
  59.  
  60.  olacaktìr. Daha önceki yazìlarìmìzdan tanìdìºìnìz yìºìt veri tipi
  61.  matematiksel ifadelerin hem deºerlendirilmesinde hem de ASSEMBLY'ye
  62.  çevirilmesinde kullanìlìr.
  63.  
  64.   Postfix ve Prefix
  65.  
  66.  Bizim günlük yaƒamìmìzda ve PASCAL, C gibi dillerde kullandìºìmìz
  67.  sìralama alternatifsiz deºildir. Matematiksel iƒaretlerin deºiƒken
  68.  grubunun önüne ya da ardìna sìralanmasì da olasìdìr. Bu iki seçenekle
  69.  birlikte geleneksel yaklaƒìm aƒaºìdaki tabloda verilmiƒtir.
  70.  
  71.   infix                       postfix                         prefix
  72.  
  73.   A+B                         AB+                             +AB
  74.   A+B-C                       AB+C-                           -+ABC
  75.   (A+B)*(C-D)                 AB+CD-*                         *+AB-CD
  76.   A^B*C-D+E/F/(G+H)           AB^C*D-EF/GH+/+                +-*^ABCD//EF+GH
  77.   ((A+B)*C-(D-E))^(F+G)       AB+C*DE--FG+^                  ^-+ABC-DE+FG
  78.   A-B/(C*D^E)                 ABCDE^*/-                      -A/B*C^DE
  79.  
  80.  Bu ay ki kodumuzun temelini oluƒturan postfix'i gözönüne alacak olursak,
  81.  deºerlendirme süreci ƒöyle iƒler: Bir matematiksel iƒarete gelene dek
  82.  deºiƒkenler ( ya da sayìlar ) sìrasìyla PUSH edilir ( yìºìta konur ) .
  83.  Bir iƒarete gelindiºinde PUSH edilmiƒ olanlar POP edilerek ( yìºìttan
  84.  alìnarak ) iƒlem, üzerlerinde uygulanìr. Örneºin tablodaki ilk satìrda
  85.  A ve B önce push edilir, '+' iƒareti gelince pop edilerek toplanìr.
  86.  ( Diºer satìrlar için sayìlar vererek kendinizi deneyebilirsiniz. )
  87.  
  88.  ₧imdi gelelim derleyici yazma kìsmìna!
  89.  
  90.  Öyle bir program yazalìm ki postfix gösterimde girdiºimiz matemetiksel
  91.  ifadelere karƒìlìk gelen ASSEMBLY kodunu yazsìn. Biz konunun daha iyi
  92.  anlaƒìlmasì için basit bir ASSEMBLY tanìmladìk. Altì tane komut var:
  93.  ADD, SUB, MUL, DIV, MOV, PUT. Assembly'miz veri aktarìmì için geçici bir
  94.  deºiƒkene gerek duyarsa TEMP_1, TEMP_2 gibi kaynak koda dahil edebiliyor.
  95.  Bu iƒ için PUT, tek yazmaçìna ( register ) atama yapmak içinse MOV.
  96.  
  97.  Örneºin 'ab+' postfix ifadesi için ƒu kod üretiliyor:
  98.  MOV a
  99.  ADD b
  100.  PUT TEMP_1
  101.  
  102.  Eºer 'ab+c*de--fg+' ifadesi girilecek olursa sonuç biraz daha uzun:
  103.  MOV a
  104.  ADD b
  105.  PUT TEMP_1
  106.  MOV TEMP_1
  107.  MUL c
  108.  PUT TEMP_2
  109.  MOV d
  110.  SUB e
  111.  PUT TEMP_3
  112.  MOV TEMP_2
  113.  SUB TEMP_3
  114.  MOV f
  115.  ADD g
  116.  PUT TEMP_5
  117.  
  118.  Artìk bir derleyicinin çalìƒma ƒekli hakkìnda hiç de azìmsanmayacak bir
  119.  bilgi sahibi oldunuz. Kaynak kod dìƒìnda hiçbir eksiºiniz kalmadì.
  120.  Haydi davranìn tuƒlara...
  121.  
  122.